#ifndef DASERVO_H_
#define DASERVO_H_

#include <Arduino.h>
#include <Wire.h>                    //I2C库文件wire
#include <Adafruit_PWMServoDriver.h> //驱动板库文件
// https://www.arduinolibraries.info/libraries/adafruit-pwm-servo-driver-library  (2.4.1)

#define DEFAULT_SERVO_SPEED 10

class DaServo : public Adafruit_PWMServoDriver
{
public:
  DaServo(int servo_index);                     //无速度参数的构造函数 / ctor of no speed parameter
  DaServo(int servo_index, long usrServoDelay); //带有速度参数的构造函数 / ctor with speed parameter

  uint8_t setServoAngle(uint16_t angle); // 设置num(0-15)号舵机角度为angle(0-180)
  void init();                           //初始化
  void setTarget(int usrTarget);         //将用户输入的坐标位置作为目标位置 / set servo's target pos
  int getTarget();                       //获取舵机目的位置 / get servo target pos
  int getPosition();                     //获取舵机当前位置 / get servo current position
  void setServoSpeed(int usrServoSpeed); //设置舵机速度 / set servo speed
  int getServoSpeed();                   //获取舵机速度 / get servo speed
  void servoUpdate();                    //舵机动起来 / make servo move
  int getDistanceToGo();                 //获取舵机当前位置与目标舵机位置之间的差距
                                         // get the distance between target and current position
private:

  int servoPin;                         //舵机序号（对应PCA9685:0-15）
  int servoTarget;                      //舵机目标位置
  int servoPos;                         //舵机当前位置
  int distance2Go;                      //舵机当前位置与目标舵机位置之间的差距
                                        // distance between current and target pos
  int delayCouter = 0;                  //控制舵机速度用计数器 / counter used to control servo speed
  int servoSpeed = DEFAULT_SERVO_SPEED; //舵机速度参数 / speed control parameter
};

#endif
